package com.yuri.news.service;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import com.yuri.news.entity.User;

/**
 * 用户Service
 * @author Yuri
 *
 */
public interface UserService {
	/**
	 * 添加用户
	 * @param user
	 * @param roleId 	部门id
	 * @return	成功返回true 失败返回false
	 */
	Boolean addUser(User user, String roleId);
	/**
	 * 设置可用状态
	 * @param id
	 * @return  成功返回true 失败返回false(失败则表示无此用户)
	 */
	Boolean setAvailable(Long id);
	/**
	 * 更新用户信息
	 * @param user	
	 * @return	成功返回true 失败返回false（返回false表示无此用户）
	 */
	Boolean updateUser(User user);
	/**
	 * 给用户添加角色
	 * @param userId	用户id
	 * @param roleId	角色id
	 * @return		成功返回true 失败返回false 失败则此权限已经存在
	 */
	Boolean userAddRole(Long userId, Long roleId);
	/**
	 * 删除用户角色
	 * @param userId	用户id
	 * @param roleId	角色id
	 * @return	成功返回true 失败返回false
	 */
	Boolean delRole(Long userId, Long roleId);
	/**
	 * 根据用户名和密码查询用户
	 * @param userName	登录名
	 * @param userPw	登录密码
	 * @return	查询到的用户
	 */
	User findByUserNameAndPw(String userName, String userPw);
	/**
	 * 根据id查询用户信息
	 * @param id
	 * @return  查询到的用户信息无结果返回null
	 */
	User findUserById(Long id);
	/**
	 * 分页查询所有用户
	 * @param page	分页信息
	 * @return	查询到的用户
	 */
	Page<User> findUserAll(Pageable page, Boolean isAva);
	/**
	 * 关键字查询（key不为数字时）
	 * @param key	关键字
	 * @param isAva	是否可用
	 * @param page	分页信息
	 * @return	查询到的用户信息(无结果返回null)
	 */
	Page<User> findUserByKey(String key, Boolean isAva, Pageable page);
	/**
	 * 根据角色名查询用户
	 * @param roleName 角色名
	 * @param isAva 是否可用
	 * @return 符合要求的用户信息
	 */
	List<User> findUserByRoleName(String roleName, Boolean isAva);
	
	/**
	 * 根据角部门查询用户
	 * @param depaName 部门名
	 * @param isAva 是否可用
	 * @return 符合要求的用户信息
	 */
	List<User> findUserByDepaName(String depaName, Boolean isAva);
}
